#include <iostream>

#include "Bouteille.h"
#include "Chaise.h"
#include "Salle.h"
#include "Issue.h"
#include "Liste.h"
#include "Robot.h"
#include <list>

using namespace std;

int main(int argc, char **argv) {

	// creation du labyrinthe
	Salle salleDebut("debut");
	Salle salleEnd("end");
	Issue myIssue(&salleEnd);
	
	salleDebut.ajouteIssue(NORD, &myIssue);
	Bouteille bouteilleEau(5.4, "Eau");
	
	// ajout du Robot dans le labyrinthe
	Liste<Element> liste;
	Robot nono(&liste, &salleDebut);
	
	char controle = 'a';
	cout << "Menu: \np - prendre les objets\nn, s, o, e allez dans la salle NORD/SUD/OUEST/EST\nx - exit\n"<<endl;
	while (controle != 'x'){
		switch (controle) {
			case 'n':
				if (nono.salleCourant->getIssue(NORD))
					nono.salleCourant = nono.salleCourant->getIssue(NORD)->destination;
				break;
			case 's':
				if (nono.salleCourant->getIssue(SUD))
					nono.salleCourant = nono.salleCourant->getIssue(SUD)->destination;
				break;		
			case 'o':
				if (nono.salleCourant->getIssue(OUEST))
					nono.salleCourant = nono.salleCourant->getIssue(OUEST)->destination;
				break;	
			case 'e':
				if (nono.salleCourant->getIssue(EST))
					nono.salleCourant = nono.salleCourant->getIssue(EST)->destination;
				break;				
			default:
				break;
		} 
		
		cout << nono << endl;
		cin >> controle;		
	}
	
	// testing
//	cout << "Hello robot!" << endl;
//	
//	Bouteille bouteilleEau(5.4, "Eau");
//	Bouteille bouteilleVin(2.5, "Vin");
//	/*
//	cout << bouteilleEau << endl;
//	cout << bouteilleVin << endl;
//	bouteilleEau = bouteilleVin;
//	cout << bouteilleEau << endl;
//	cout << bouteilleVin << endl;
//	*/
//	cout << endl;
//
//	Chaise chaise("bleu", 4);
//	Chaise trepied("rouge", 3);
//	/*
//	cout << chaise << endl;
//	cout << trepied << endl;
//	trepied = chaise;
//	cout << chaise << endl;
//	cout << trepied << endl;
//	*/
//	cout << endl;
//
//
//	Liste<Element> liste2;
//	try {
//		liste += bouteilleEau;
//		liste += bouteilleVin;
//		liste += chaise;
//		liste += trepied;
//	} catch (InsertionException e) {
//		cout << e.what() << endl;
//	}
//	
//	
//	IteratorListe iterator = liste.begin();
//	IteratorListe iterator2 = liste.end();;
//	cout << "Bouteille eau : " << iterator.getElementCourant()->rapport() << endl;
//	cout << "begin : " << iterator.getElementCourant() << endl;
//	cout << "Trepied : " << iterator2.getElementCourant()->rapport() << endl;
//	cout << "end : " << iterator2.getElementCourant() << endl;
//	cout << "Iterator1 " << iterator.getElementCourant() << " iterator2 " << iterator2.getElementCourant() << endl;
//		
//	/*
//	iterator = liste.begin();
//	iterator.operator ++();
//	cout << iterator.getElementCourant()->rapport() << endl;
//	*/
//	int i = 0;
//	iterator = liste.begin();
//	iterator2 = liste.end();
//	if (iterator.getElementCourant() != iterator2.getElementCourant()) cout << "true" << endl;
//	else cout << "false" << endl;
//	
//	if (iterator == iterator2) cout << "true" << endl;
//	else cout << "false" << endl;
//	
//	/*for (iterator = liste.begin(); iterator != liste.end(); iterator++) {
//		cout << "Element " << i+1 << " : " << iterator.getElementCourant() << endl;
//		i++;
//	}
//	 */
//	while (iterator != liste.end()) {
//		cout << "Element " << i+1 << " : " << iterator.getElementCourant() << endl;
//		cout << "Iterator1 " << iterator.getElementCourant() << " iterator2 " << liste.end().getElementCourant() << endl;
//		i++;
//		iterator++;
//	}
//	 
//	cout << endl;
//	
//	try {
//		cout << "Element 3 : " << liste[-1]->rapport() << endl;
//	} catch (AccessException e) {
//		cout << e.what() << endl;
//	}
//	
//	cout << endl;
//	
//	//cout << liste << endl;
//	//cout << liste.rapport() << endl;
//	
//	Liste<Element>::iterator it;
//	it = liste.begin();
//	
//	i = 0;
//	while (it != liste.end()) {
//		cout << "Element " << i+1 << " : " << it.getElementCourant() << endl;
//		cout << "Iterator1 " << it.getElementCourant() << " iterator2 " << liste.end().getElementCourant() << endl;
//		i++;
//		it++;
//	}
//
//	/*
//	Salle *chambre = new Salle("Chambre");
//	Salle *salon = new Salle("Salon");
//	Issue *issueNord = new Issue(salon);
//	chambre->ajouteIssue(NORD, issueNord);
//
//	cout << chambre->toString() << endl;
//	*/
//	//system("pause");
	return 0;
}
